package repository

import (
	"dataaysn/internal/model"

	"gorm.io/gorm"
)

type TaskRepository interface {
	CreateTask(task *model.Task) error
	GetTask(id string) (*model.Task, error)
	UpdateTask(task *model.Task) error
	DeleteTask(id string) error
	ListTasks() ([]model.Task, error)
	ToggleTaskStatus(id string, status string) error
}
type gormTaskRepository struct {
	db *gorm.DB
}

func NewGormTaskRepository(db *gorm.DB) TaskRepository {
	return &gormTaskRepository{db: db}
}

func (r *gormTaskRepository) CreateTask(task *model.Task) error {
	return r.db.Create(task).Error
}

func (r *gormTaskRepository) GetTask(id string) (*model.Task, error) {
	var task model.Task
	err := r.db.First(&task, id).Error
	return &task, err
}

func (r *gormTaskRepository) UpdateTask(task *model.Task) error {
	return r.db.Save(task).Error
}

func (r *gormTaskRepository) DeleteTask(id string) error {
	return r.db.Delete(&model.Task{}, id).Error
}

func (r *gormTaskRepository) ListTasks() ([]model.Task, error) {
	var tasks []model.Task
	err := r.db.Find(&tasks).Error
	return tasks, err
}

func (r *gormTaskRepository) ToggleTaskStatus(id string, status string) error {
	return r.db.Model(&model.Task{}).Where("id = ?", id).Update("status", status).Error
}
